#! /usr/bin/python
# -*- coding: UTF-8 -*-
# 添加OC垃圾代码
import os, sys
import random
import string
import re
import md5
import time
import json
import shutil
import hashlib
import time
import argparse

import sys

reload(sys)
sys.setdefaultencoding("utf-8")

script_path = os.path.split(os.path.realpath(sys.argv[0]))[0]

# 忽略文件列表，不给这些文件添加垃圾函数
prefix_name = 'ttv_addMix_'
# ext_name_list = ['.h', '.m']


class RebuildBase(object):
    def __init__(self):
        pass

    def runTask(self, curPath):
        pass


class RebuildHeaderTool(RebuildBase):

    def runTask(self, curPath):

        list = []
        self.listDir(curPath, list)
        headerList = self.filterExtName(list, '.h')
        codeList = self.filterExtName(list, '.m')
        # allList = headerList + codeList

        for path in codeList:
            self.deleteCodeFunction(path)

        for path in headerList:
            self.deleteHeaderFunction(path)

        print("重置主工程索引成功")

    # 生成替身
    def deleteHeaderFunction(self, path):

        try:
            file_object = open(path, "r+")
            text = file_object.read()
            if text.find(prefix_name) != -1:
                file_object.seek(0)
                lines = file_object.readlines()
                filterLines = []
                for line in lines:
                    if line.find(prefix_name) == -1:
                        filterLines.append(line)
                file_object.close()
                filterLines = self.removeLineBreak(filterLines)
                os.remove(path)
                file_object = open(path, "w")
                file_object.seek(0)
                file_object.writelines(filterLines)
                file_object.close()
        except:
            print("*.h 出错路径  " + path)
            pass
        finally:
            pass

    def deleteCodeFunction(self, path):
        try:
            file_object = open(path, "r+")
            text = file_object.read()
            if text.find(prefix_name) != -1:
                file_object.seek(0)
                lines = file_object.readlines()
                filterLines = []

                isOneFunction = 0
                for line in lines:
                    if line.find(prefix_name) > 0 or isOneFunction == 1:
                        if line.find('}') == -1:
                            isOneFunction = 1
                        else:
                            isOneFunction = 0
                    else:
                        filterLines.append(line)

                file_object.close()
                filterLines = self.removeLineBreak(filterLines)
                os.remove(path)
                file_object = open(path, "w")
                file_object.seek(0)
                file_object.writelines(filterLines)
                file_object.close()
        except:
            print("*.m 出错路径  " + path)
            pass
        finally:
            pass

    # 移除多余换行
    def removeLineBreak(self,list):
        filterLines = []
        rows = len(list)
        if rows < 5:
            return list

        for i in range(0,rows,1) :
            curline = list[i]

            if i < rows - 4 :
                nextLine = list[i+1]
                nextnextLine = list[i+2]
                nextnextLine = list[i + 3]

            if curline == '\n' and nextLine == '\n' and nextnextLine == '\n':
                pass
            else:
                filterLines.append(curline)

        return filterLines

    # 过滤指定后缀名
    def filterExtName(self, list, extName):
        rstList = []
        for text in list:
            if text.lower().rfind(extName.lower()) > 0:
                rstList.append(text)
        return rstList

    # 递归文件
    def listDir(self, path, list_name):  # 传入存储的list
        for file in os.listdir(path):
            file_path = os.path.join(path, file)
            if os.path.isdir(file_path):
                self.listDir(file_path, list_name)
            else:
                list_name.append(file_path)


# 解析参数
def parse_args():
    parser = argparse.ArgumentParser(description='oc垃圾代码生成工具.')
    parser.add_argument('--oc_folder', dest='oc_folder', type=str, required=True, help='OC代码所在目录')
    # parser.add_argument('--replace', dest='replace_ios', required=False, help='直接替换oc源代码', action="store_true")

    args = parser.parse_args()
    return args


def main():
    app_args = parse_args()
    global ios_src_path, backup_ios_folder, target_ios_folder
    ios_src_path = app_args.oc_folder
    if not os.path.exists(ios_src_path):
        print "oc_folder path not exist."
        exit(0)

    indexTool = RebuildHeaderTool()
    indexTool.runTask(ios_src_path)

    print "\nfinished"


if __name__ == "__main__":
    main()
